#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
数学运算工具

本文件提供基本的数学运算功能，包括加减乘除等
"""

from mcp.server.fastmcp import FastMCP
from typing import List, Dict, Optional, Union
import math

# 创建 MCP 服务实例
mcp = FastMCP("Math Tools Server")

@mcp.tool()
def add(a: float, b: float) -> float:
    """加法运算
    
    Args:
        a: 第一个加数
        b: 第二个加数
        
    Returns:
        两数之和
    """
    return a + b

@mcp.tool()
def subtract(a: float, b: float) -> float:
    """减法运算
    
    Args:
        a: 被减数
        b: 减数
        
    Returns:
        两数之差
    """
    return a - b

@mcp.tool()
def multiply(a: float, b: float) -> float:
    """乘法运算
    
    Args:
        a: 第一个因数
        b: 第二个因数
        
    Returns:
        两数之积
    """
    return a * b

@mcp.tool()
def divide(a: float, b: float) -> Union[float, str]:
    """除法运算
    
    Args:
        a: 被除数
        b: 除数
        
    Returns:
        两数之商或错误信息
    """
    try:
        if b == 0:
            return "错误: 除数不能为零"
        return a / b
    except Exception as e:
        return f"计算错误: {str(e)}"

@mcp.tool()
def power(base: float, exponent: float) -> float:
    """幂运算
    
    Args:
        base: 底数
        exponent: 指数
        
    Returns:
        幂运算结果
    """
    return base ** exponent

@mcp.tool()
def square_root(x: float) -> Union[float, str]:
    """平方根运算
    
    Args:
        x: 被开方数
        
    Returns:
        平方根或错误信息
    """
    try:
        if x < 0:
            return "错误: 负数没有实数平方根"
        return math.sqrt(x)
    except Exception as e:
        return f"计算错误: {str(e)}"

# 启动服务
if __name__ == "__main__":
    mcp.run(transport="stdio")